home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / Image / Barcode / ean13.php < prev    next >
PHP Script  |  2004-03-24  |  9KB  |  252 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
  3. //
  4. // +----------------------------------------------------------------------+
  5. // | PHP version 4.0                                                      |
  6. // +----------------------------------------------------------------------+
  7. // | Copyright (c) 1997-2001 The PHP Group                                |
  8. // +----------------------------------------------------------------------+
  9. // | This source file is subject to version 3.0 of the PHP license,       |
  10. // | that is bundled with this package in the file LICENSE, and is        |
  11. // | available at through the world-wide-web at                           |
  12. // | http://www.php.net/license/3_0.txt.                                  |
  13. // | If you did not receive a copy of the PHP license and are unable to   |
  14. // | obtain it through the world-wide-web, please send a note to          |
  15. // | license@php.net so we can mail you a copy immediately.               |
  16. // +----------------------------------------------------------------------+
  17. // | Author: Didier FOURNOUT <didier.fournout@nyc.fr>                     |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: ean13.php,v 1.1 2003/01/21 11:46:20 jason Exp $
  21. //
  22.  
  23. require_once "PEAR.php";
  24. require_once "Image/Barcode.php";
  25.  
  26. /**
  27.  * Class to create a EAN 13 barcode
  28.  *
  29.  * @author Didier FOURNOUT <didier.fournout@nyc.fr>
  30.  */
  31.  
  32. class Image_Barcode_ean13 extends Image_Barcode
  33. {
  34.     /**
  35.      * Barcode type
  36.      * @var string
  37.      */
  38.     var $_type = 'ean13';
  39.  
  40.     /**
  41.      * Barcode height
  42.      *
  43.      * @var integer
  44.      */
  45.     var $_barcodeheight = 50;
  46.  
  47.     /**
  48.      * Font use to display text
  49.      *
  50.      * @var integer
  51.      */
  52.     var $_font = 2;  // gd internal small font
  53.  
  54.     /**
  55.      * Bar width
  56.      *
  57.      * @var integer
  58.      */
  59.     var $_barwidth = 1;
  60.  
  61.  
  62.     /**
  63.      * Number set
  64.      * @var array
  65.      */
  66.     var $_number_set = array(
  67.            '0' => array(
  68.                     'A' => array(0,0,0,1,1,0,1),
  69.                     'B' => array(0,1,0,0,1,1,1),
  70.                     'C' => array(1,1,1,0,0,1,0)
  71.                         ),
  72.            '1' => array(
  73.                     'A' => array(0,0,1,1,0,0,1),
  74.                     'B' => array(0,1,1,0,0,1,1),
  75.                     'C' => array(1,1,0,0,1,1,0)
  76.                         ),
  77.            '2' => array(
  78.                     'A' => array(0,0,1,0,0,1,1),
  79.                     'B' => array(0,0,1,1,0,1,1),
  80.                     'C' => array(1,1,0,1,1,0,0)
  81.                         ),
  82.            '3' => array(
  83.                     'A' => array(0,1,1,1,1,0,1),
  84.                     'B' => array(0,1,0,0,0,0,1),
  85.                     'C' => array(1,0,0,0,0,1,0)
  86.                         ),
  87.            '4' => array(
  88.                     'A' => array(0,1,0,0,0,1,1),
  89.                     'B' => array(0,0,1,1,1,0,1),
  90.                     'C' => array(1,0,1,1,1,0,0)
  91.                         ),
  92.            '5' => array(
  93.                     'A' => array(0,1,1,0,0,0,1),
  94.                     'B' => array(0,1,1,1,0,0,1),
  95.                     'C' => array(1,0,0,1,1,1,0)
  96.                         ),
  97.            '6' => array(
  98.                     'A' => array(0,1,0,1,1,1,1),
  99.                     'B' => array(0,0,0,0,1,0,1),
  100.                     'C' => array(1,0,1,0,0,0,0)
  101.                         ),
  102.            '7' => array(
  103.                     'A' => array(0,1,1,1,0,1,1),
  104.                     'B' => array(0,0,1,0,0,0,1),
  105.                     'C' => array(1,0,0,0,1,0,0)
  106.                         ),
  107.            '8' => array(
  108.                     'A' => array(0,1,1,0,1,1,1),
  109.                     'B' => array(0,0,0,1,0,0,1),
  110.                     'C' => array(1,0,0,1,0,0,0)
  111.                         ),
  112.            '9' => array(
  113.                     'A' => array(0,0,0,1,0,1,1),
  114.                     'B' => array(0,0,1,0,1,1,1),
  115.                     'C' => array(1,1,1,0,1,0,0)
  116.                         )
  117.         );
  118.  
  119.     var $_number_set_left_coding = array(
  120.            '0' => array('A','A','A','A','A','A'),
  121.            '1' => array('A','A','B','A','B','B'),
  122.            '2' => array('A','A','B','B','A','B'),
  123.            '3' => array('A','A','B','B','B','A'),
  124.            '4' => array('A','B','A','A','B','B'),
  125.            '5' => array('A','B','B','A','A','B'),
  126.            '6' => array('A','B','B','B','A','A'),
  127.            '7' => array('A','B','A','B','A','B'),
  128.            '8' => array('A','B','A','B','B','A'),
  129.            '9' => array('A','B','B','A','B','A')
  130.         );
  131.     function draw($text, $imgtype = 'png')
  132.     {
  133.         //TODO: Check if $text is number and len=13
  134.  
  135.         // Calculate the barcode width
  136.         $barcodewidth = (strlen($text)) * (7 * $this->_barwidth)
  137.             + 3 // left
  138.             + 5 // center
  139.             + 3 // right
  140.             + imagefontwidth($this->_font)+1
  141.             ;
  142.  
  143.         $barcodelongheight = (int) (imagefontheight($this->_font)/2)+$this->_barcodeheight;
  144.  
  145.         // Create the image
  146.         $img = ImageCreate($barcodewidth, $barcodelongheight+ imagefontheight($this->_font)+1);
  147.  
  148.         // Alocate the black and white colors
  149.         $black = ImageColorAllocate($img, 0, 0, 0);
  150.         $white = ImageColorAllocate($img, 255, 255, 255);
  151.  
  152.         // Fill image with white color
  153.         imagefill($img, 0, 0, $white);
  154.  
  155.         // get the first digit which is the key for creating the first 6 bars
  156.         $key = substr($text,0,1);
  157.  
  158.         // Initiate x position
  159.         $xpos = 0;
  160.  
  161.         // print first digit
  162.         imagestring($img, $this->_font, $xpos, $this->_barcodeheight, $key, $black);
  163.         $xpos= imagefontwidth($this->_font) + 1;
  164.  
  165.         // Draws the left guard pattern (bar-space-bar)
  166.         // bar
  167.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  168.         $xpos += $this->_barwidth;
  169.         // space
  170.         $xpos += $this->_barwidth;
  171.         // bar
  172.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  173.         $xpos += $this->_barwidth;
  174.  
  175.         // Draw left $text contents
  176.         $set_array=$this->_number_set_left_coding[$key];
  177.         for ($idx = 1; $idx < 7; $idx ++) {
  178.             $value=substr($text,$idx,1);
  179.             imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
  180.             foreach ($this->_number_set[$value][$set_array[$idx-1]] as $bar) {
  181.                 if ($bar) {
  182.                     imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
  183.                 }
  184.                 $xpos += $this->_barwidth;
  185.             }
  186.         }
  187.  
  188.         // Draws the center pattern (space-bar-space-bar-space)
  189.         // space
  190.         $xpos += $this->_barwidth;
  191.         // bar
  192.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  193.         $xpos += $this->_barwidth;
  194.         // space
  195.         $xpos += $this->_barwidth;
  196.         // bar
  197.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  198.         $xpos += $this->_barwidth;
  199.         // space
  200.         $xpos += $this->_barwidth;
  201.  
  202.  
  203.         // Draw right $text contents
  204.         for ($idx = 7; $idx < 13; $idx ++) {
  205.             $value=substr($text,$idx,1);
  206.             imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
  207.             foreach ($this->_number_set[$value]['C'] as $bar) {
  208.                 if ($bar) {
  209.                     imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
  210.                 }
  211.                 $xpos += $this->_barwidth;
  212.             }
  213.         }
  214.  
  215.         // Draws the right guard pattern (bar-space-bar)
  216.         // bar
  217.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  218.         $xpos += $this->_barwidth;
  219.         // space
  220.         $xpos += $this->_barwidth;
  221.         // bar
  222.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  223.         $xpos += $this->_barwidth;
  224.  
  225.         // Send image to browser
  226.         switch($imgtype) {
  227.  
  228.             case 'gif':
  229.                 header("Content-type: image/gif");
  230.                 imagegif($img);
  231.                 imagedestroy($img);
  232.             break;
  233.  
  234.             case 'jpg':
  235.                 header("Content-type: image/jpg");
  236.                 imagejpeg($img);
  237.                 imagedestroy($img);
  238.             break;
  239.  
  240.             default:
  241.                 header("Content-type: image/png");
  242.                 imagepng($img);
  243.                 imagedestroy($img);
  244.             break;
  245.  
  246.         }
  247.  
  248.         return;
  249.  
  250.     } // function create
  251.  
  252. } // class